package munyorderweb_Android;

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Calendar;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import munyorderweb_DB.DB_manager;

public class PostOrderServlet extends HttpServlet {

	String no = "select max(customer_no) from customer";

	@Override
	protected void doPost(
			HttpServletRequest req,
			HttpServletResponse resp)
					throws ServletException, IOException {
		req.setCharacterEncoding("UTF-8");

		Connection con = null;
		try{
			con = DB_manager.getConnection();
			Statement stm = con.createStatement();
			ResultSet rs = stm.executeQuery(no);

			int MaxNo = 0;
			if (rs.next()) {
				MaxNo = rs.getInt("max(customer_no)");
			}
			MaxNo++;

			Calendar calendar = Calendar.getInstance();
			int hour = calendar.get(Calendar.HOUR_OF_DAY);

			//		1	リクエスト情報から、端末番号、オーダー番号、テーブル番号を取得する
			//		2	リクエスト情報から、メニュー番号、注文数を全て取得する

			Map<String, String[]> map = req.getParameterMap();

			String[] Ta_no = (String[])map.get("table_no");
			String[] Me_no = (String[])map.get("menu_no");
			String[] Or_co = (String[])map.get("order_count");
			String[] Cu_me = (String[])map.get("customer_member");
//			String[] Cu_to = (String[])map.get("customer_total");
//			String[] Cu_no = (String[])map.get("customer_no");
//			String[] Cu_pe = (String[])map.get("customer_person");

			//			上記項目のいずれかが取得できない場合、処理結果として「SC_BAD＿REQEST（４００）」を返して終了する。
			if (/*Cu_to.length == 0 ||
			 	Cu_pe.length == 0||
			 	Cu_no.length == 0||*/
					Me_no.length == 0
					|| Cu_me.length == 0
					|| Ta_no.length == 0
					|| Or_co.length == 0)
			{
				resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
			}
			else {
				String Ta_No  = Ta_no[0];
				String Cu_Me  = Cu_me[0];

				//customerテーブルに情報を追加する。
				String sql = "insert into customer(customer_no, customer_total, customer_person, order_date,"
						+ " customer_time, customer_member)"
						+ " values(" + MaxNo + ", 0, 0, now(), "+ hour + ", " + Cu_Me + ") ";
				stm.executeUpdate(sql);

				for(int i=0; i<Me_no.length; i++){

//					String Ta_No  = Ta_no[i];
					String Me_No  = Me_no[i];
					String Or_Co  = Or_co[i];
//					String Cu_Me  = Cu_me[i];
//					String Cu_No  = Cu_no[i];
//					String Cu_To  = Cu_to[i];
//					String Cu_Pe  = Cu_pe[i];

					//				注文数が正数でない場合、処理結果として「SC＿BAD_REQEST（４００）」を返して終了する。
					if(Integer.parseInt(Or_Co) <= 0){
						resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
					}else{

						System.out.println("Key :  " + Ta_No);
						System.out.println("Key :  " + Me_No);
						System.out.println("Key :  " + Or_Co);
						System.out.println("Key :  " + Cu_Me);
//						System.out.println("Key :  " + Cu_No);
//						System.out.println("Key :  " + Cu_To);
//						System.out.println("Key :  " + Cu_Pe);
//
//						//customerテーブルに情報を追加する。
//						String sql = "insert into customer(customer_no, customer_total, customer_person, order_date,"
//								+ " customer_time, customer_member)"
//								+ " values(" + MaxNo + ", 0, 0, now(), "+ hour + ", " + Cu_Me + ") ";
//						stm.executeUpdate(sql);

						//ordersテーブルに情報を追加する。
						sql = "insert into orders( table_no, menu_no, order_count, order_delivery, customer_no)"
								+ " values( "
								+ Ta_No + ", " + Me_No + "," + Or_Co + ",1, " + MaxNo +")";
						stm.executeUpdate(sql);
					}
				}
			}
		}catch(SQLException e){
//			例外が発生した場合、「SC_SERVICE_UNAVAILABLE（５０３）」を返して終了する。
			e.printStackTrace();
			resp.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
		}finally{
			try{
				if(con != null){
					con.close();
				}
			}catch (SQLException e){
				e.printStackTrace();
			}
		}

		//	3	処理結果として「SC＿OK（２００）」を返して終了する。
		resp.setStatus(HttpServletResponse.SC_OK);
	}
}